#include <QUuid>
#include "jsonMsg.h"
#include "jsonString.h"

QJsonObject heartbeat_msg;
QJsonObject auto_start_msg;
QJsonObject auto_stop_msg;
QJsonObject auto_pause_msg;
QJsonObject auto_manual_msg;
QJsonObject manual_auto_msg;

QJsonObject manual_gripper_open_l_msg;
QJsonObject manual_gripper_close_l_msg;

QJsonObject manual_gripper_open_r_msg;
QJsonObject manual_gripper_close_r_msg;

QJsonObject manual_move_f_msg;
QJsonObject manual_move_b_msg;
QJsonObject manual_move_l_msg;
QJsonObject manual_move_r_msg;
QJsonObject manual_robot_en_msg;
QJsonObject manual_robot_dis_msg;

QJsonObject manual_arm_xi_l_msg;
QJsonObject manual_arm_xd_l_msg;

QJsonObject manual_arm_yi_l_msg;
QJsonObject manual_arm_yd_l_msg;

QJsonObject manual_arm_zi_l_msg;
QJsonObject manual_arm_zd_l_msg;

QJsonObject manual_arm_rxi_l_msg;
QJsonObject manual_arm_rxd_l_msg;

QJsonObject manual_arm_ryi_l_msg;
QJsonObject manual_arm_ryd_l_msg;

QJsonObject manual_arm_rzi_l_msg;
QJsonObject manual_arm_rzd_l_msg;

QJsonObject manual_arm_xi_r_msg;
QJsonObject manual_arm_xd_r_msg;

QJsonObject manual_arm_yi_r_msg;
QJsonObject manual_arm_yd_r_msg;

QJsonObject manual_arm_zi_r_msg;
QJsonObject manual_arm_zd_r_msg;

QJsonObject manual_arm_rxi_r_msg;
QJsonObject manual_arm_rxd_r_msg;

QJsonObject manual_arm_ryi_r_msg;
QJsonObject manual_arm_ryd_r_msg;

QJsonObject manual_arm_rzi_r_msg;
QJsonObject manual_arm_rzd_r_msg;

static QJsonArray parseJsonToArray(const QString& jsonString);
static QJsonArray objectToArray(const QJsonObject& obj);

static QJsonObject parseStringToJsonObject(const QString& jsonString)
{
    QJsonParseError err;
    QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8(), &err);

    if(err.error != QJsonParseError::NoError)
    {
        qDebug() << "JSON解析错误" << err.errorString();
        return QJsonObject(); 
    }

    // 检查是否为JSON对象
    if(!doc.isObject())
    {
        qDebug() << "输入不是有效的JSON对象";
        return QJsonObject();
    }
    
    // // 获取JSON对象
    // QJsonObject jsonObj = doc.object();
    // QUuid uuid = QUuid::createUuid();
    // jsonObj["msg_id"] = uuid.toString(QUuid::WithoutBraces);

    // return jsonObj;
    return doc.object();
}

void initJsonMsg()
{
    heartbeat_msg = parseStringToJsonObject(JsonString::HEART_BEAT);
    
    auto_start_msg = parseStringToJsonObject(JsonString::AUTO_START);
    auto_stop_msg = parseStringToJsonObject(JsonString::AUTO_STOP);
    auto_pause_msg = parseStringToJsonObject(JsonString::AUTO_PAUSE);
    auto_manual_msg = parseStringToJsonObject(JsonString::AUTO_MANUAL);
    manual_auto_msg = parseStringToJsonObject(JsonString::MANUAL_AUTO);

    manual_gripper_open_l_msg = parseStringToJsonObject(JsonString::MANUAL_GRIPPER_OPEN_L);
    manual_gripper_close_l_msg = parseStringToJsonObject(JsonString::MANUAL_GRIPPER_CLOSE_L);

    manual_gripper_open_r_msg = parseStringToJsonObject(JsonString::MANUAL_GRIPPER_OPEN_R);
    manual_gripper_close_r_msg = parseStringToJsonObject(JsonString::MANUAL_GRIPPER_CLOSE_R);

    manual_move_f_msg = parseStringToJsonObject(JsonString::MANUAL_MOVE_F);
    manual_move_b_msg = parseStringToJsonObject(JsonString::MANUAL_MOVE_B);
    manual_move_l_msg = parseStringToJsonObject(JsonString::MANUAL_MOVE_L);
    manual_move_r_msg = parseStringToJsonObject(JsonString::MANUAL_MOVE_R);
    manual_robot_en_msg = parseStringToJsonObject(JsonString::MANUAL_ROBOT_EN);
    manual_robot_dis_msg = parseStringToJsonObject(JsonString::MANUAL_ROBOT_DISABLE);

    manual_arm_xi_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_XI_L);
    manual_arm_xd_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_XD_L);

    manual_arm_yi_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_YI_L);
    manual_arm_yd_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_YD_L);

    manual_arm_zi_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_ZI_L);
    manual_arm_zd_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_ZD_L);

    manual_arm_rxi_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RXI_L);
    manual_arm_rxd_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RXD_L);

    manual_arm_ryi_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RYI_L);
    manual_arm_ryd_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RYD_L);

    manual_arm_rzi_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RZI_L);
    manual_arm_rzd_l_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RZD_L);

    manual_arm_xi_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_XI_R);
    manual_arm_xd_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_XD_R);

    manual_arm_yi_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_YI_R);
    manual_arm_yd_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_YD_R);

    manual_arm_zi_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_ZI_R);
    manual_arm_zd_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_ZD_R);

    manual_arm_rxi_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RXI_R);
    manual_arm_rxd_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RXD_R);

    manual_arm_ryi_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RYI_R);
    manual_arm_ryd_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RYD_R);

    manual_arm_rzi_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RZI_R);
    manual_arm_rzd_r_msg = parseStringToJsonObject(JsonString::MANUAL_ARM_RZD_R);
}